Задана последовательность из n
чисел: A = (a1, a2, ..., an).
Определить, существует ли пара (i,
j) с 1 ≤ i, j ≤ n такая, что ai – aj = x.
Вход. Первая строка содержит два числа n
(2 ≤ n ≤ 2 ⋅ 105)
и x (-109 ≤ x ≤ 109).
Вторая строка содержит n целых
чисел a1, a2, ..., an (-109
≤ ai ≤ 109).
Выход. Выведите Yes, если
существует пара (i, j) с 1 ≤ i, j ≤ n
такая, что ai – aj = x, и No в
противном случае.
Пример
входа 1 |
Пример
выхода 1 |
7 3 2 8 7 6 1 12 5 |
Yes |
|
|
Пример
входа 2 |
Пример
выхода 2 |
7 3 2 8 7 1 12 6 1 |
No |
структуры
данных – set
Перепишем равенство в виде: ai = aj + x.
Занесем заданную последоватлеьность во множество s. Далее для каждого элемента a
из множества проверим, лежит ли во множестве число a + x. Если ответ положительный, то выводим Yes. Если ни для какого элемента a
из множества число a + x не принадлежит множеству, то выводим No.
Пример
Рассмотрим первый пример. Занесем
все числа во множество.
Имеется пара чисел (5, 8),
разность между которыми равна x = 3.
scanf("%d %d", &n, &x);
for (i = 0; i < n; i++)
{
scanf("%d", &a);
s.insert(a);
}
Для каждого элемента a
из множества s проверяем, принадлежит ли множеству число a + x.
for (int a : s)
{
if (s.find(a + x) != s.end())
{
Если число a + x принадлежит множеству, то выводим Yes и останавливаем работу программы.
printf("Yes\n");
return 0;
}
}
Если сообщение Yes не было выведено, то выводим No.
printf("No\n");